﻿namespace BLL
{
    using DAL;
    using System;
    using System.Data;
    using System.Data.SqlClient;
    using System.Text;

    public class RequestController
    {
        private ConnectionManager connMgr = new ConnectionManager();

        public void ChangeAN(int idSolicitacao, int idAnalistaNegocios)
        {
            SqlCommand qryX = new SqlCommand("UPDATE Solicitacoes SET idAnalistaNegocios = @idAnalistaNegocios WHERE idSolicitacao = @idSolicitacao");
            qryX.Parameters.AddWithValue("@idAnalistaNegocios", idAnalistaNegocios);
            qryX.Parameters.AddWithValue("@idSolicitacao", idSolicitacao);
            this.connMgr.doCommand(qryX);
        }

        public void ChangeStatus(int idSolicitacao, char Status_old, char Status_new, int idUsuario, string DescChange)
        {
            StringBuilder qryX = new StringBuilder();
            qryX.Append("UPDATE [Solicitacoes] SET [Status] = @Status, ");
            switch (Status_old)
            {
                case 'A':
                    qryX.Append("[DataDesignacao] = @Data");
                    break;

                case 'D':
                    qryX.Append("[DataEntrega] = @Data");
                    break;

                case 'E':
                    qryX.Append("[DataFinalizacao] = @Data");
                    break;

                case 'F':
                    qryX.Append("[DataFinalizacao] = @Data");
                    break;
            }
            qryX.Append(" WHERE idSolicitacao = @idSolicitacao");
            SqlCommand qryY = new SqlCommand(qryX.ToString());
            qryY.Parameters.AddWithValue("@Data", DateTime.Now);
            qryY.Parameters.AddWithValue("@idSolicitacao", idSolicitacao);
            qryY.Parameters.AddWithValue("@Status", Status_new);
            this.connMgr.doCommand(qryY);
            SqlCommand qryZ = new SqlCommand("INSERT INTO [StatusChanges]\r\n                                                            ([idSolicitacao]\r\n                                                            ,[idUsuario]\r\n                                                            ,[Status_Old]\r\n                                                            ,[Status_New]\r\n                                                            ,[DataMudanca]\r\n                                                            ,[DesMudanca])\r\n                                                      VALUES\r\n                                                            (@idSolicitacao\r\n                                                            ,@idUsuario\r\n                                                            ,@Status_Old\r\n                                                            ,@Status_New\r\n                                                            ,@DataMudanca\r\n                                                            ,@DesMudanca)");
            qryZ.Parameters.AddWithValue("@idSolicitacao", idSolicitacao);
            qryZ.Parameters.AddWithValue("@idUsuario", idUsuario);
            qryZ.Parameters.AddWithValue("@Status_Old", Status_old);
            qryZ.Parameters.AddWithValue("@Status_New", Status_new);
            qryZ.Parameters.AddWithValue("@DataMudanca", DateTime.Now);
            qryZ.Parameters.AddWithValue("@DesMudanca", DescChange);
            this.connMgr.doCommand(qryZ);
        }

        public int CountRequests(int idUsuario, char Status)
        {
            int idTeam = new UserController().GetUserTeamID(idUsuario);
            StringBuilder qryText = new StringBuilder();
            qryText.Append("SELECT COUNT(*) FROM Solicitacoes WHERE [Status] = @Status");
            string swhere = "";
            switch (idTeam)
            {
                case 1:
                    swhere = " AND [idAccountManager] = @idUsuario";
                    break;

                case 2:
                    swhere = " AND [idAccountManager] = @idUsuario";
                    break;

                case 3:
                    swhere = " AND [idAnalistaNegocios] = @idUsuario";
                    break;
            }
            qryText.Append(swhere);
            SqlCommand qryX = new SqlCommand(qryText.ToString());
            qryX.Parameters.AddWithValue("@idUsuario", idUsuario);
            qryX.Parameters.AddWithValue("@Status", Status);
            DataRow dr = this.connMgr.doReader(qryX).Rows[0];
            return Convert.ToInt32(dr[0]);
        }

        public int GetAnalistaNegocios(int idSolicitacao)
        {
            int idAnalistaNegocios = 0;
            try
            {
                try
                {
                    SqlCommand qryX = new SqlCommand("SELECT idAnalistaNegocios FROM Solicitacoes WHERE idSolicitacao = @idSolicitacao");
                    qryX.Parameters.AddWithValue("@idSolicitacao", idSolicitacao);
                    DataRow dr = this.connMgr.doReader(qryX).Rows[0];
                    idAnalistaNegocios = Convert.ToInt32(dr[0]);
                }
                catch (Exception)
                {
                    idAnalistaNegocios = 0;
                }
            }
            finally
            {
            }
            return idAnalistaNegocios;
        }

        public DataRow GetRequest(int idSolicitacao)
        {
            SqlCommand qryX = new SqlCommand("SELECT [idAccountManager]\r\n                                                     ,[idAnalistaNegocios]\r\n                                                     ,[DescSolicitacao]\r\n                                                     ,[DataSolicitacao]\r\n                                                     ,[idTipoSolicitacao]\r\n                                                     ,[DataExpectativa]\r\n                                                     ,[Cliente]\r\n                                                     ,[idFabricante]\r\n                                                     ,[Status]\r\n                                                     ,[idEstagioVendas]\r\n                                                     ,[PeriodoExpectativa]\r\n                                                     ,[idSLA]\r\n                                                     ,[idCriador]\r\n                                                     ,[DataDesignacao]\r\n                                                     ,[DataEntrega]\r\n                                                     ,[DataFinalizacao]\r\n                                                     ,[Titulo]\r\n                                                     ,[idProposta], [idAnalistaEngajado], [DataRevisada] \r\n                                                FROM [Solicitacoes]\r\n                                                WHERE idSolicitacao = @idSolicitacao");
            qryX.Parameters.AddWithValue("@idSolicitacao", idSolicitacao);
            return this.connMgr.doReader(qryX).Rows[0];
        }

        public char GetStatus(int idSolicitacao)
        {
            SqlCommand qryX = new SqlCommand("SELECT Status FROM Solicitacoes WHERE idSolicitacao = @idSolicitacao");
            qryX.Parameters.AddWithValue("@idSolicitacao", idSolicitacao);
            DataRow dr = this.connMgr.doReader(qryX).Rows[0];
            return Convert.ToChar(dr[0]);
        }

        public void NewRequest(int idAccountManager, int idCriador, int idTipoSolicitacao, int idFabricante, int idEstagioVenda, int idSLA, DateTime Data, string Descricao, string Titulo, string Cliente, int idProposta, int idAnalistaEngajado)
        {
            SqlCommand qryX = new SqlCommand("INSERT INTO [dbo].[Solicitacoes]\r\n                                                   ([idAccountManager]\r\n                                                   ,[DescSolicitacao]\r\n                                                   ,[DataSolicitacao]\r\n                                                   ,[idTipoSolicitacao]\r\n                                                   ,[DataExpectativa]\r\n                                                   ,[Cliente]\r\n                                                   ,[idFabricante]\r\n                                                   ,[Status]\r\n                                                   ,[idEstagioVendas]\r\n                                                   ,[PeriodoExpectativa]\r\n                                                   ,[idSLA]\r\n                                                   ,[idCriador]\r\n                                                   ,[Titulo]\r\n                                                   ,[idProposta],[idAnalistaEngajado])\r\n                                             VALUES\r\n                                                   (@idAccountManager\r\n                                                   ,@DescSolicitacao\r\n                                                   ,@DataSolicitacao\r\n                                                   ,@idTipoSolicitacao\r\n                                                   ,@DataExpectativa\r\n                                                   ,@Cliente\r\n                                                   ,@idFabricante\r\n                                                   ,@Status\r\n                                                   ,@idEstagioVendas\r\n                                                   ,@PeriodoExpectativa\r\n                                                   ,@idSLA\r\n                                                   ,@idCriador\r\n                                                   ,@Titulo\r\n                                                   ,@idProposta,@idAnalistaEngajado)");
            qryX.Parameters.AddWithValue("@idAccountManager", idAccountManager);
            qryX.Parameters.AddWithValue("@DescSolicitacao", Descricao);
            qryX.Parameters.AddWithValue("@idTipoSolicitacao", idTipoSolicitacao);
            qryX.Parameters.AddWithValue("@DataExpectativa", Data);
            qryX.Parameters.AddWithValue("@Cliente", Cliente);
            qryX.Parameters.AddWithValue("@idFabricante", idFabricante);
            qryX.Parameters.AddWithValue("@Status", 'A');
            qryX.Parameters.AddWithValue("@idEstagioVendas", idEstagioVenda);
            qryX.Parameters.AddWithValue("@PeriodoExpectativa", 'M');
            qryX.Parameters.AddWithValue("@idSLA", idSLA);
            qryX.Parameters.AddWithValue("@idCriador", idCriador);
            qryX.Parameters.AddWithValue("@Titulo", Titulo);
            qryX.Parameters.AddWithValue("@idProposta", idProposta);
            qryX.Parameters.AddWithValue("@DataSolicitacao", DateTime.Now);
            qryX.Parameters.AddWithValue("@idAnalistaEngajado", idAnalistaEngajado);
            this.connMgr.doCommand(qryX);
        }

        public DataTable RequestsByUser(int idUsuario, char Status)
        {
            SqlCommand qryReqsByUser = new SqlCommand("dbo.QrySolicitacoesByUsr");
            qryReqsByUser.CommandType = CommandType.StoredProcedure;
            qryReqsByUser.Parameters.AddWithValue("@idUsr", idUsuario);
            qryReqsByUser.Parameters.AddWithValue("@Status", Status);
            return this.connMgr.doReader(qryReqsByUser);
        }

        public void UpdateRequest(int idSolicitacao, int idAccountManager, int idFabricante, int idEstagioVenda, string Description, DateTime date, string Titulo, int idProposta, int idTipo, DateTime DataRevisada)
        {
            SqlCommand updRequest = new SqlCommand(@"UPDATE Solicitacoes
                                                     SET
                                                        [idAccountManager] = @idAccountManager,
                                                        [idTipoSolicitacao] = @idtipoSolicitacao,
                                                        [DescSolicitacao] = @DescSolicitacao,
                                                        [idFabricante] = @idFabricante,
                                                        [idEstagioVendas] = @idEstagioVendas,
                                                        [DataDesignacao] = @DataDesignacao,
                                                        [Titulo] = @Titulo,
                                                        [DataRevisada] = @DataRevisada,
                                                        [idProposta] = @idProposta WHERE idSolicitacao = @idSolicitacao");
            updRequest.Parameters.AddWithValue("@idSolicitacao", idSolicitacao);
            updRequest.Parameters.AddWithValue("@idAccountManager", idAccountManager);
            updRequest.Parameters.AddWithValue("@DescSolicitacao", Description);
            updRequest.Parameters.AddWithValue("@idFabricante", idFabricante);
            updRequest.Parameters.AddWithValue("@idEstagioVendas", idEstagioVenda);
            updRequest.Parameters.AddWithValue("@DataDesignacao", date);
            updRequest.Parameters.AddWithValue("@Titulo", Titulo);
            updRequest.Parameters.AddWithValue("@idProposta", idProposta);
            updRequest.Parameters.AddWithValue("@idtipoSolicitacao", idTipo);
            updRequest.Parameters.AddWithValue("@DataRevisada", DataRevisada);
            this.connMgr.doCommand(updRequest);
        }

        public void SaveHistory(string h, int u, int s)
        {
            SqlCommand qryX = new SqlCommand("INSERT INTO [dbo].[Historico] ([idSolicitacao],[idUsuario],[Historico]) VALUES (@idSolicitacao,@idUsuario,@Historico)");
            qryX.Parameters.AddWithValue("@idSolicitacao", s);
            qryX.Parameters.AddWithValue("@idUsuario", u);
            qryX.Parameters.AddWithValue("@Historico", h);

            this.connMgr.doCommand(qryX);
        }

        public DataTable GetHistory(int idSolicitacao)
        {
            SqlCommand qryX = new SqlCommand(@"SELECT idHistorico,U.Nome as EnviadoPor,Historico,EnviadoEm FROM Historico as H INNER JOIN Usuarios as U ON H.idUsuario = U.idUsuario WHERE idSolicitacao = @idSolicitacao");
            qryX.Parameters.AddWithValue("@idSolicitacao", idSolicitacao);
            return connMgr.doReader(qryX);
        }
    }
}

